package com.decent.ejfadmin.common.bean;

import com.decent.ejfadmin.common.exception.OperateFailException;
import com.decent.ejfadmin.common.util.WithHoldDes;
import com.decent.ejfadmin.user.bean.Const;
import lombok.Data;

import java.util.Objects;

import static com.decent.ejfadmin.user.bean.Const.LEVEL_FOUR;

/**
 * describe:实名认证等级
 *
 * @author JunLei He
 * @date 2018年10月11日
 */
@Data
public class SupCertificateDto {
    /**
     * id
     */
    private Long id;
    /**
     * 会员id
     */
    private Long userId;
    /**
     * 会员账号
     */
    private String account;
    /**
     * 支付宝账号
     */
    private String alipay;
    /**
     * 会员名称
     */
    private String name;
    /**
     * 身份证号码
     */
    private String citizenIdNum;
    /**
     * 身份证盐值
     */
    private String citizenIdSalt;
    /**
     * 支付宝标识
     */
    private String bizNo;
    /**
     * 实名认证创建时间
     */
    private String startTime;
    /**
     * 实名认证修改时间
     */
    private String endTime;
    /**
     * 已经成功认证等级  0 未认证 ;1 一级认证成功;2 二级认证成功;3 三级认证成功;4 四级认证成功
     */
    private Integer successLevel;
    /**
     * 正在申请等级的实名认证状态  0 未认证   5认证中  6成功 7失败
     */
    private Integer levelState;
    /**
     * 当前正在申请的认证等级 正在认证的实名认证等级: 1 一级认证; 2 二级认证; 3 三级认证-电子签名; 4 四级认证-合同;
     */
    private Integer certLevel;
    /**
     * 身份证正面
     */
    private String frontPicUrl;
    /**
     * 身份证反面
     */
    private String reversePicUrl;
    /**
     * 手持身份证
     */
    private String handingPicUrl;
    /**
     * 电子签名
     */
    private String eSignature;
    /**
     * 短连接
     */
    private String shortUrl;
    /**
     * 备注
     */
    private String remark;
    /**
     * 判断定时器是否需要查询
     */
    private Integer isVery;
    /**
     * 会员名称
     */
    private String nickName;
    /**
     * 合同文件标识
     */
    private String contractId;

    public SupCertificateDto() {
    }

    /**
     * 身份证号码解密
     */
    public void parseDbCitizenIdNum() {
        citizenIdNum = WithHoldDes.decodeValue(citizenIdSalt, citizenIdNum);
    }

    /**
     * 检测实名认证状态
     *
     * @return 返回布尔
     */
    public void checkCertificateState(Integer status) {

        //已经成功的等级 小于等于 当前认证等级不支持
        if (successLevel >= certLevel) {
            throw new OperateFailException("支付宝认证当前认证等级不能小于或等于已经成功等级");
        }

        //修改是失败的话直接返回
        if (Const.FAIL_CERT.equals(status)) {
            return;
        }

        //二级认证不成功,三级认证不允许成功
        if (successLevel < Const.LEVEL_TWO && Const.LEVEL_THREE.equals(certLevel)) {
            throw new OperateFailException("支付宝认证未成功,三级认证不允许置成功");
        }
        if (Const.DEAL_CERT.equals(status) && (!Objects.equals(certLevel, LEVEL_FOUR))) {
            throw new OperateFailException("只有当前四级认证且未认证成功可置为处理中");
        }
    }
    
}
